/**
 * 物料价格本地存储管理工具
 * 支持 GOLD(黄金)、SILVER(白银)、PLATINUM(铂金)、PALLADIUM(钯金) 四种物料
 */

// 物料类型常量
export const MATERIAL_TYPES = {
  GOLD: 'GOLD',
  SILVER: 'SILVER', 
  PLATINUM: 'PLATINUM',
  PALLADIUM: 'PALLADIUM'
};

// 存储键名
const STORAGE_KEYS = {
  GOLD: 'material_price_gold',
  SILVER: 'material_price_silver',
  PLATINUM: 'material_price_platinum',
  PALLADIUM: 'material_price_palladium'
};

// 物料中文名称映射
export const MATERIAL_NAMES = {
  GOLD: '黄金',
  SILVER: '白银',
  PLATINUM: '铂金',
  PALLADIUM: '钯金'
};

/**
 * 存储单个物料价格信息
 * @param {string} materialType 物料类型
 * @param {object} priceData 价格数据
 */
export function saveMaterialPrice(materialType, priceData) {
  try {
    if (!MATERIAL_TYPES[materialType]) {
      console.warn(`未知的物料类型: ${materialType}`);
      return false;
    }

    const storageKey = STORAGE_KEYS[materialType];
    const timestamp = Date.now();
    
    // 构建存储数据结构
    const storageData = {
      materialType,
      materialName: MATERIAL_NAMES[materialType],
      priceData,
      timestamp,
      updateTime: new Date(timestamp).toLocaleString('zh-CN')
    };

    // 存储到本地
    uni.setStorageSync(storageKey, storageData);
    
    // console.log(`已存储${MATERIAL_NAMES[materialType]}价格信息:`, storageData);
    return true;
  } catch (error) {
    // console.error(`存储${materialType}价格信息失败:`, error);
    return false;
  }
}

/**
 * 获取单个物料价格信息
 * @param {string} materialType 物料类型
 * @returns {object|null} 价格数据或null
 */
export function getMaterialPrice(materialType) {
  try {
    if (!MATERIAL_TYPES[materialType]) {
      // console.warn(`未知的物料类型: ${materialType}`);
      return null;
    }

    const storageKey = STORAGE_KEYS[materialType];
    const data = uni.getStorageSync(storageKey);
    
    if (data && data.priceData) {
      return data;
    }
    
    return null;
  } catch (error) {
    // console.error(`获取${materialType}价格信息失败:`, error);
    return null;
  }
}

/**
 * 获取所有物料价格信息
 * @returns {object} 所有物料价格数据
 */
export function getAllMaterialPrices() {
  const result = {};
  
  Object.values(MATERIAL_TYPES).forEach(materialType => {
    result[materialType] = getMaterialPrice(materialType);
  });
  
  return result;
}

/**
 * 清除单个物料价格信息
 * @param {string} materialType 物料类型
 */
export function clearMaterialPrice(materialType) {
  try {
    if (!MATERIAL_TYPES[materialType]) {
      // console.warn(`未知的物料类型: ${materialType}`);
      return false;
    }

    const storageKey = STORAGE_KEYS[materialType];
    uni.removeStorageSync(storageKey);
    
    // console.log(`已清除${MATERIAL_NAMES[materialType]}价格信息`);
    return true;
  } catch (error) {
    // console.error(`清除${materialType}价格信息失败:`, error);
    return false;
  }
}

/**
 * 清除所有物料价格信息
 */
export function clearAllMaterialPrices() {
  Object.values(MATERIAL_TYPES).forEach(materialType => {
    clearMaterialPrice(materialType);
  });
  
  // console.log('已清除所有物料价格信息');
}

/**
 * 检查物料价格信息是否存在
 * @param {string} materialType 物料类型
 * @returns {boolean} 是否存在
 */
export function hasMaterialPrice(materialType) {
  try {
    if (!MATERIAL_TYPES[materialType]) {
      return false;
    }

    const storageKey = STORAGE_KEYS[materialType];
    const data = uni.getStorageSync(storageKey);
    
    return !!(data && data.priceData);
  } catch (error) {
    console.error(`检查${materialType}价格信息失败:`, error);
    return false;
  }
}

/**
 * 获取物料价格信息的更新时间
 * @param {string} materialType 物料类型
 * @returns {string|null} 更新时间或null
 */
export function getMaterialPriceUpdateTime(materialType) {
  try {
    const data = getMaterialPrice(materialType);
    return data ? data.updateTime : null;
  } catch (error) {
    console.error(`获取${materialType}更新时间失败:`, error);
    return null;
  }
}

/**
 * 检查物料价格信息是否过期（默认5分钟）
 * @param {string} materialType 物料类型
 * @param {number} expireTime 过期时间（毫秒），默认5分钟
 * @returns {boolean} 是否过期
 */
export function isMaterialPriceExpired(materialType, expireTime = 5 * 60 * 1000) {
  try {
    const data = getMaterialPrice(materialType);
    if (!data) return true;
    
    const now = Date.now();
    const timeDiff = now - data.timestamp;
    
    return timeDiff > expireTime;
  } catch (error) {
    console.error(`检查${materialType}价格过期状态失败:`, error);
    return true;
  }
}
